/*
 * Copyright (c) 2022  by Junzhao
 * THIS FILE IS PART OF JAVASE Song Huongkang PROJECT
 * All Rights Reserved.
 */

package 学习.中.方法重写;

/**
 * @description 方法重写
 * 在子类中对父类继承来的方法进行改造 执行时子类的方法覆盖父类的方法
 *      要求：
 *      ①必须与父类方法具有相同的方法名称 参数列表
 *      ②返回值类型不能大于父类的返回值类型
 *             父类                       子类
 *        特殊  void                      void
 *        引用  A类                       A类或A的子类
 *        基本          子类必须与父类相同
 *
 *      ③权限不能小于父类的方法（不可以重写父类中private的方法）
 *      ④抛出异常 不大于父类抛出的异常类型
 *      ——————————————————————————————————————————————————————
 *      非static才考虑重写 （都声明static的时候不是重写）
 *
 *
 * @author 俊昭
 * @date 2022/3/26
*/
public class OverwriteTest {
    public static void main(String[] args) {

        midSchool huangzhong = new midSchool("huangzhong");
        huangzhong.lesson();// 执行的是midSchool的方法

        School school =new School();
        school.lesson();// 由父类对象调用方法还是执行父类的方法

    }
}
class School{
    private String name;
    private int numberOfStudent;

    public School() {
    }

    public School(String name) {
        this.name = name;
    }

    public int getNumberOfStudent() {
        return numberOfStudent;
    }

    public void setNumberOfStudent(int numberOfStudent) {
        this.numberOfStudent = numberOfStudent;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void lesson(){
        System.out.println("学校讲课");
    }
    public int rollCall(int actualNumberOfPeople){
        System.out.println("缺勤" + (numberOfStudent - actualNumberOfPeople));
        return numberOfStudent - actualNumberOfPeople;
    }
}
class midSchool extends School{
    public midSchool(String name) {
        this.setName(name);
    }

    @Override
    public int rollCall(int actualNumberOfPeople) {
        System.out.println("缺勤" + (getNumberOfStudent() - actualNumberOfPeople));
        System.out.println("有人请假了");
        return getNumberOfStudent() - actualNumberOfPeople;
    }
    @Override
    public void lesson(){// Overrides method in School
        System.out.println("高中上的课更深入了");
    }
}
